fix reversion on skipping dead keys in --all/bare
authorJoey Hess <joeyh@joeyh.name>
Tue, 13 Sep 2022 18:38:13 +0000 (14:38 -0400)
committerJoey Hess <joeyh@joeyh.name>
Tue, 13 Sep 2022 18:38:13 +0000 (14:38 -0400)
Fix a reversion that made dead keys not be skipped when operating on all
keys via --all or in a bare repo. (Introduced in version 8.20200720)

Also, improved the documentation of git-annex-dead, it does not only apply
to fsck --all.

Also, made git-annex fsck, when run on a file whose key is dead, display
that. Before, it displayed that only when run with --all, but with this
fix, it skips dead keys with --all. But it can still be run on a file that
uses a dead key, and displaying "This key is dead" explains to the user
why it does not consider missing content for it to be a problem.

Sponsored-by: k0ld on Patreon
CHANGELOG
CmdLine/Seek.hs
Command/Fsck.hs
doc/forum/How_to_forget_keys_that_get_can__39__t_find__63__/comment_4_ee99cdb44671eea30eaa4351dbb9dc96._comment [new file with mode: 0644]
doc/git-annex-dead.mdwn

index d948c20931b147ed4218fb9bcb09dc294889da94..be72e2089ec4c18fb2a8a02930faa132dadf2712 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -10,6 +10,9 @@ git-annex (10.20220823) UNRELEASED; urgency=medium
     process, rather than repeatedly prompting.
   * Use curl for downloads from git remotes when annex.url-options
     and other git configs are set.
+  * Fix a reversion that made dead keys not be skipped when operating on
+    all keys via --all or in a bare repo.
+    (Introduced in version 8.20200720)
 
  -- Joey Hess <id@joeyh.name>  Mon, 29 Aug 2022 15:03:04 -0400
 
index a20999a16c25d0facccf2fdcb05343031c57761e..24ee8f03f4fbf98c3eade13c43915ac653e4f74e 100644 (file)
@@ -27,6 +27,7 @@ import CmdLine.GitAnnex.Options
 import CmdLine.Action
 import Logs
 import Logs.Unused
+import Logs.Location
 import Types.Transfer
 import Logs.Transfer
 import Types.Link
@@ -283,7 +284,8 @@ withKeyOptions' ko auto mkkeyaction fallbackaction worktreeitems = do
                let go reader = reader >>= \case
                        Just (k, f, content) -> checktimelimit (discard reader) $ do
                                maybe noop (Annex.Branch.precache f) content
-                               keyaction Nothing (SeekInput [], k, mkActionItem k)
+                               unlessM (checkDead k) $
+                                       keyaction Nothing (SeekInput [], k, mkActionItem k)
                                go reader
                        Nothing -> return ()
                Annex.Branch.overBranchFileContents getk go >>= \case
index eef6a4f2143d3c619efa1a5cd142a30606f3ae2f..77929f14baa3b8becfafbe1cfba9234b140ca69a 100644 (file)
@@ -574,7 +574,7 @@ checkKeyNumCopies key afile numcopies = do
        (deadlocations, safelocations) <- trustPartition DeadTrusted otherlocations
        let present = length safelocations
        if present < fromNumCopies numcopies
-               then ifM (pure (not hasafile) <&&> checkDead key)
+               then ifM (checkDead key)
                        ( do
                                showLongNote $ "This key is dead, skipping."
                                return True
diff --git a/doc/forum/How_to_forget_keys_that_get_can__39__t_find__63__/comment_4_ee99cdb44671eea30eaa4351dbb9dc96._comment b/doc/forum/How_to_forget_keys_that_get_can__39__t_find__63__/comment_4_ee99cdb44671eea30eaa4351dbb9dc96._comment
new file mode 100644 (file)
index 0000000..f6cdbeb
--- /dev/null
@@ -0,0 +1,15 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 4"""
+ date="2022-09-13T18:21:13Z"
+ content="""
+This was a reversion. 
+
+In 2017,  [[!commit bcf276655c04f36e021f091240ed2dc8211924fd]]
+made --all skip dead keys, by modifying loggedKeys.
+
+But, then the implementation of --all changed to not use loggedKeys
+in [[!commit d010ab04be5a8d74fe85a2fa27a853784d1f9009]].
+
+I've fixed this!
+"""]]
index d981aa4ba1dab06dfbc476e63c47230514aa34cb..6dbfe9a8c8def6c1b48e04bf748e6553006581fc 100644 (file)
@@ -17,8 +17,8 @@ Repositories can be specified using their remote name, their
 description, or their UUID. (To undo, use `git-annex semitrust`.)
 
 When a key is specified, indicates that the content of that key has been
-irretrievably lost. This prevents commands like `git annex fsck --all`
-from complaining about it. 
+irretrievably lost. This makes the key be skipped when operating
+on all keys with eg `--all`.
 (To undo, add the key's content back to the repository, 
 by using eg, `git-annex reinject`.)